# -*- coding: utf-8 -*-
"""
Monkey Log Analyzer 主程序
分析monkey log，提取错误信息，辨别问题错误类型，生成报告
"""

import sys
import os
from src.log_reader import LogReader
from src.error_analyzer import ErrorAnalyzer
from src.report_generator import ReportGenerator


def print_usage():
    """打印使用说明"""
    print("=" * 60)
    print("Monkey Log Analyzer - 使用说明")
    print("=" * 60)
    print("用法：python main.py <log_file_path>")
    print("示例：python main.py monkey_test.log")
    print("说明：")
    print("  - 支持分析monkey测试生成的.log文件")
    print("  - 自动识别5种导致程序崩溃或停止的错误类型")
    print("  - 生成HTML格式的分析报告")
    print("  - 报告文件命名：原文件名_report.html")
    print("=" * 60)


def main():
    """主函数"""
    print("🐒 Monkey Log Analyzer")
    
    # 检查命令行参数
    if len(sys.argv) != 2:
        print("❌ 错误：请提供日志文件路径")
        print_usage()
        return 1
    
    log_file_path = sys.argv[1]
    
    # 转换为绝对路径
    if not os.path.isabs(log_file_path):
        log_file_path = os.path.abspath(log_file_path)
    
    # 初始化各个模块
    log_reader = LogReader()
    error_analyzer = ErrorAnalyzer()
    report_generator = ReportGenerator()
    
    # 验证并读取日志文件
    if not log_reader.validate_log_file(log_file_path):
        print("❌ 日志文件验证失败")
        return 1
    
    log_lines = log_reader.read_log_file(log_file_path)
    if log_lines is None:
        print("❌ 读取日志文件失败")
        return 1
    
    # 分析错误信息
    errors, monkey_finished = error_analyzer.analyze_log(log_lines)
    error_summary = error_analyzer.get_error_summary(errors)
    
    # 显示分析结果
    if monkey_finished:
        if errors:
            print(f"⚠️  测试完成，发现 {len(errors)} 个错误")
        else:
            print("✅ 测试成功完成，未发现错误")
    else:
        if errors:
            print(f"❌ 发现 {len(errors)} 个错误，测试未正常完成")
        else:
            print("⚠️  未发现错误，但测试可能未正常完成")
    
    # 生成HTML报告
    report_path = report_generator.generate_report(errors, log_file_path, error_summary, monkey_finished)
    
    if report_path:
        print(f"📝 报告已生成：{report_path}")
        return 0
    else:
        print("❌ 报告生成失败")
        return 1


def analyze_log_file(log_file_path: str) -> bool:
    """
    分析日志文件的函数接口
    
    Args:
        log_file_path (str): 日志文件路径
        
    Returns:
        bool: 分析是否成功
    """
    # 初始化各个模块
    log_reader = LogReader()
    error_analyzer = ErrorAnalyzer()
    report_generator = ReportGenerator()
    
    # 验证并读取日志文件
    if not log_reader.validate_log_file(log_file_path):
        return False
    
    log_lines = log_reader.read_log_file(log_file_path)
    if log_lines is None:
        return False
    
    # 分析错误
    errors, monkey_finished = error_analyzer.analyze_log(log_lines)
    error_summary = error_analyzer.get_error_summary(errors)
    
    # 生成报告
    report_path = report_generator.generate_report(errors, log_file_path, error_summary, monkey_finished)
    
    return bool(report_path)


if __name__ == "__main__":
    try:
        exit_code = main()
        sys.exit(exit_code)
    except KeyboardInterrupt:
        print("\n\n⚠️  程序被用户中断")
        sys.exit(1)
    except Exception as e:
        print(f"\n❌ 程序运行时发生未预期的错误：{e}")
        sys.exit(1)